package com.iweb.entity;

import com.iweb.constant.CartItemChangeEnum;
import lombok.Data;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author jay
 * @date 2021/9/14
 * @description 购物车实体类
 */
@Data
public class ShoppingCart {
    private Integer id;
    /**
     * 当前用户id
     */
    private Integer userId;
    /**
     * 总价格
     */
    private Double totalPrice;
    /**
     * 购物车项集合
     */
    private List<ShoppingCartItem> itemList = new ArrayList<>();

    /**
     * 计算总价格
     */
    public void calcTotalPrice() {
        // 清除之前旧的总价格
        this.totalPrice = 0.0;
        for (ShoppingCartItem item : this.itemList) {
            this.totalPrice += item.getSum();
        }
    }

    /**
     * 删除购物车项
     *
     * @param productId 商品id-购物项id
     */
    public void removeItem(Integer productId) {
        Iterator<ShoppingCartItem> iterator = this.itemList.iterator();
        while (iterator.hasNext()) {
            ShoppingCartItem item = iterator.next();
            //  判断当前对象是否为要删除的
            if (item.getProductId().equals(productId)) {
                iterator.remove();
                break;
            }
        }
        // 重新计算价格
        this.calcTotalPrice();
    }

    /**
     * 加入商品到购物车（加入到购物车项集合里）
     *
     * @param product 待加入到购物车的商品对象
     */
    public void addItem(Product product) {
        if (product == null) {
            return;
        }
        ShoppingCartItem existItem = null;
        for (ShoppingCartItem item : this.itemList) {
            if (item.getProductId().equals(product.getId())
                    && item.getProductName().equals(product.getName())) {
                existItem = item;
                break;
            }
        }
        // 情况1：待添加到购物的这个对象对应的相关信息，不存在
        if (existItem == null) {
            ShoppingCartItem newItem = new ShoppingCartItem();
            newItem.setAmount(1);
            newItem.setPrice(product.getPrice());
            newItem.setPhoto(product.getFileName());
            newItem.setProductId(product.getId());
            newItem.setProductName(product.getName());
            newItem.setSum(newItem.getAmount() * newItem.getPrice());
            // 添加新的项到购物车中
            this.itemList.add(newItem);
        } else {
            // 情况2：待添加到购物的这个对象对应的相关信息，存在
            // 原数量要加1
            existItem.setAmount(existItem.getAmount() + 1);
            existItem.setSum(existItem.getAmount() * existItem.getPrice());
        }
        // 重新计算总价格
        this.calcTotalPrice();
    }

    /**
     * 修改购物车某项的数量
     *
     * @param productId 要修改的商品数量对应的id
     * @param option 修改标志：加/减
     * @return true:找到并修改成功; false:未找到或修改失败
     */
    public boolean changeAmount(Integer productId, CartItemChangeEnum option){
        boolean isFind = false;
        for (ShoppingCartItem item : this.itemList) {
            if (item.getProductId().equals(productId)){
                // 增加数量
                if (option== CartItemChangeEnum.add) {
                    item.setAmount(item.getAmount()+1);
                }else{
                    // 减少数量
                    if (item.getAmount()<=1){
                        return false;
                    }
                    item.setAmount(item.getAmount()-1);
                }
                // 修改小计价格
                item.setSum(item.getAmount()*item.getPrice());
                // 修改总价格
                this.calcTotalPrice();
                isFind=true;
                break;
            }
        }
        return isFind;
    }

}
